package tray;

import java.awt.*;
import java.awt.event.*;
import java.awt.PopupMenu;

import libraries.MultimediaLibrary;
import GUI.JFrameBase;
import GUI.JFrameConfig;
import GUI.JFrameCredits;
import libraries.Application;

//import oracle.classloader.query.Exit;

public class Tray {
    private static MultimediaLibrary Lib = MultimediaLibrary.getInstance();
    /*private static String pathRaiz = "/";
    private static String pathLogoV =  pathRaiz.concat("Software Images/IconoDicomizadorV.gif");
    private static String pathLogoR =  pathRaiz.concat("Software Images/IconoDicomizadorR.gif");
    */
    private Image logoV = Lib.getImageIcon(3).getImage();/*Toolkit.getDefaultToolkit().getImage(pathLogoV);*/
    private Image logoR = Lib.getImageIcon(5).getImage();/*Toolkit.getDefaultToolkit().getImage(pathLogoR);*/

    private Application application = new Application();
    //private JFrameBase frameBase = new JFrameBase();
    private JFrameConfig frameMenu = new JFrameConfig();
    private JFrameCredits frameCreditos = new JFrameCredits();
    
    public MenuItem paciente;
    public MenuItem config;
    public MenuItem creditos;
    private MenuItem exit = new MenuItem("Salir");
        
    public Tray()
    {       
        final TrayIcon trayIcon;
        
        if (SystemTray.isSupported()) {

            final SystemTray tray = SystemTray.getSystemTray();
            // DEFINICIÓN DEL ICONO EN EL TRAY
            PopupMenu menu = this.crearMenu();  
            trayIcon = new TrayIcon(logoV, "DICOMIZADOR", menu);	// TEXTO DE LA BURBUJA SOBRE EL ICONO
            trayIcon.setImageAutoSize(true);
            
            //  ARRANCA EL FRAME BASE PERO SE MANTIENE INVISIBLE            
            application.initInterface();
            application.show();
            /*frameBase.setLocationRelativeTo(null); //para centrar la ventana en la pantalla
            frameBase.setState(Frame.NORMAL);
            frameBase.setVisible(false);*/

            //frameBase.setDefaultCloseOperation(paciente.setEnabled(true));
            //frameBase.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
            
            //  ARRANCA EL FRAME MENU PERO SE MANTIENE INVISIBLE            
            frameMenu.setLocationRelativeTo(null); //para centrar la ventana en la pantalla
            frameMenu.setState(Frame.NORMAL);
            frameMenu.setVisible(false);
            frameMenu.setDefaultCloseOperation(frameMenu.DISPOSE_ON_CLOSE);
            /*frameMenu.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    setMenuEnabled();
                }
            });*/
            
            //  ARRANCA EL FRAME CREDITOS PERO SE MANTIENE INVISIBLE            
            frameCreditos.setLocationRelativeTo(null); //para centrar la ventana en la pantalla
            frameCreditos.setState(Frame.NORMAL);
            frameCreditos.setVisible(false);
            //frameCreditos.setDefaultCloseOperation(frameCreditos.DO_NOTHING_ON_CLOSE);
            frameCreditos.setDefaultCloseOperation(frameCreditos.DISPOSE_ON_CLOSE);
            /*frameCreditos.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    setMenuEnabled();
                }
            });*/

            // SE DEFINEN LAS FUNCIONES QUE SE EJECUTARÁN PARA CADA ACCIÓN
            ActionListener pacienteListener = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Abriendo ficha de paciente...");
                                                            
                    /*paciente.setEnabled(false);
                    config.setEnabled(true);
                    creditos.setEnabled(true);*/
                    
                    
                    // SE VISUALIZA EL FRAME CENTRADO EN PANTALLA
                    application.show();
                    /*frameBase.setLocationRelativeTo(null); //para centrar la ventana en la pantalla
                    frameBase.setState(Frame.NORMAL);
                    frameBase.setVisible(true);*/
                    
                    
                    frameMenu.setVisible(false);
                    frameCreditos.setVisible(false);
                }
            };
            ActionListener configListener = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Accediendo a la configuración...");
                    
                    /*paciente.setEnabled(true);
                    config.setEnabled(false);
                    creditos.setEnabled(true);*/
                    
                    // SE VISUALIZA EL FRAME CENTRADO EN PANTALLA
                    frameMenu.setLocationRelativeTo(null); //para centrar la ventana en la pantalla
                    frameMenu.setState(Frame.NORMAL);
                    frameMenu.setVisible(true);     

                    application.hide();
                    //frameBase.setVisible(false);
                    frameCreditos.setVisible(false);
                }
            };
            ActionListener creditosListener = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Accediendo a los créditos...");

                    /*paciente.setEnabled(true);
                    config.setEnabled(true);
                    creditos.setEnabled(false);*/
                    
                    // SE VISUALIZA EL FRAME CENTRADO EN PANTALLA
                    frameCreditos.setLocationRelativeTo(null); //para centrar la ventana en la pantalla
                    frameCreditos.setState(Frame.NORMAL);
                    frameCreditos.setVisible(true);
                    
                    application.hide();
                    //frameBase.setVisible(false);
                    frameMenu.setVisible(false);     
                    
                }
            };
            ActionListener exitListener = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Cerrando aplicación...");
                    System.exit(0);
                }
            };
            ActionListener actionListener = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    trayIcon.displayMessage("DOBLE CLICK", 
                        "Se abrirá la ventana para crear una ficha de paciente",
                        TrayIcon.MessageType.INFO);
             
                    /*paciente.setEnabled(false);
                    config.setEnabled(true);
                    creditos.setEnabled(true);*/
                   
                    // SE VISUALIZA EL FRAME CENTRADO EN PANTALLA
                    application.show();
                    /*frameBase.setLocationRelativeTo(null); //para centrar la ventana en la pantalla
                    frameBase.setState(Frame.NORMAL);
                    frameBase.setVisible(true);*/
                    
                    frameMenu.setVisible(false);
                    frameCreditos.setVisible(false);
                }
            };            
                    
            // SE ASIGNAN LAS ACCIONES A LOS OBJETOS
            paciente.addActionListener(pacienteListener);   // ACCEDE A LA FUNCIÓN PARA ACCEDER A PACIENTE
            config.addActionListener(configListener);   // ACCEDE A LA FUNCIÓN PARA ACCEDER A CONFIGURACIÓN
            creditos.addActionListener(creditosListener);   // ACCEDE A LA FUNCIÓN PARA ACCEDER A CREDITOS
            exit.addActionListener(exitListener);   // ACCEDE A LA FUNCIÓN PARA CERRAR EL PROGRAMA
            trayIcon.addActionListener(actionListener);
            

            try {
                  tray.add(trayIcon);
            }catch (AWTException e) {
                System.err.println("TrayIcon could not be added.");
            }

        } else {
            System.err.println("System tray is currently not supported.");
        }
    }
    
    public PopupMenu crearMenu(){    // DEFINICIÓN DEL MENÚ EN EL TRAY
        PopupMenu menu = new PopupMenu();
        // SE AÑADEN LOS ELEMENTOS DEL MENÚ
        paciente = menu.add(new MenuItem("Crear nuevo estudio DICOM"));
        config = menu.add(new MenuItem("Configuración"));
        creditos = menu.add(new MenuItem("Creditos"));   
        menu.addSeparator();     
        menu.add(exit);
        
        return menu;
    }
    /*public void setMenuEnabled(){
        paciente.setEnabled(true);
        config.setEnabled(true);
        creditos.setEnabled(true);
    }*/
        
    public static void main(String[] args){
        Tray main = new Tray();
    }
    
}
